﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.Domain.Core;
using Cesave.Domain.PermisosModule.Resources;
using System.Data;

namespace Cesave.Domain.PermisosModule.Contracts.Afianzadoras
{

    public  class AfianzadoraService
        : IAfianzadoraService
    {
        private IAfianzadoraRepository _afianzadorarepository;

        public AfianzadoraService(IAfianzadoraRepository afianzadorarepository)
        {
            _afianzadorarepository = afianzadorarepository;
        }

        public void AddAfianzadora(Entities.Afianzadora afianzadora)
        {
            IUnitOfWork unitofwork = _afianzadorarepository.StoreContext;
            _afianzadorarepository.Add(afianzadora);
            try
            {
                unitofwork.Commit();
            }
            catch (Exception)
            {
                unitofwork.RollbackChanges();
                unitofwork.CommitAndRefreshChanges();
            }

        }

        public void ChangeAfianzadora(Entities.Afianzadora afianzadora)
        {
            IUnitOfWork unitofwork = _afianzadorarepository.StoreContext;
            _afianzadorarepository.Modify(afianzadora);
            try
            {
                unitofwork.Commit();
            }
            catch (Exception)
            {
                unitofwork.RollbackChanges();
                unitofwork.CommitAndRefreshChanges();
            }
        }


        public List<Entities.Afianzadora> findAfianzadorasByJunta(Guid juntaGuid)
        {
            AfianzadorasByJuntaSpecification specification = new AfianzadorasByJuntaSpecification(juntaGuid);
            return _afianzadorarepository.FindAfianzadorasByJunta(specification).ToList();
        }

		public Entities.Afianzadora FindAfianzadoraByGuid(Guid afianzadoraGuid)
		{
			if (afianzadoraGuid == Guid.Empty)
				throw new ArgumentException(Messages.exception_InvalidArgument, "afianzadoraGuid");
			AfianzadoraByGuidSpecification specification = new AfianzadoraByGuidSpecification(afianzadoraGuid);
			return _afianzadorarepository.GetBySpec(specification).FirstOrDefault();
		}

		public void DeleteAfianzadora(Entities.Afianzadora afianzadora)
		{
			if (afianzadora == null)
				throw new ArgumentNullException(Messages.exception_InvalidArgument, "afianzadora");
			IUnitOfWork unitOfWork = _afianzadorarepository.StoreContext;
			_afianzadorarepository.Remove(afianzadora);
			try
			{
				unitOfWork.Commit();
			}
			catch (OptimisticConcurrencyException)
			{
				unitOfWork.RollbackChanges();
				unitOfWork.CommitAndRefreshChanges();
			}
		}

        public void Dispose()
        {
			if (_afianzadorarepository != null && _afianzadorarepository.StoreContext != null)
				_afianzadorarepository.StoreContext.Dispose();
        }
	}
}
